package com.xksms.miniotest.service;

import com.xksms.miniotest.utils.text.JsonResult;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @ClassName MinIoTestApplication
 * @Description service接口
 * @Author 程超
 * @Date 2022/8/4 17:22
 */
public interface UploadService {
    /**
     * 上传一个水印照片
     *
     * @param file             文件
     * @param bucket           桶名
     * @param objectName       路径
     * @param quality          压缩质量 1为百分之百
     * @param positions        水印位置
     * @param waterMarkContent 水印内容   换行  以 \ 为分隔符
     * @param deductReason     扣分标准 也是文件名
     * @param rgb              水印颜色
     * @param alpha            水印透明度
     * @return com.ance.common.utils.JsonResult
     * @throws Exception 异常
     * @Author chengchao
     * @Date 15:48 2022/8/3
     **/
    JsonResult uploadWaterMarkImage(MultipartFile file, String bucket, String objectName, float quality, String positions, String waterMarkContent, String deductReason, String rgb, float alpha) throws Exception;

    /**
     * 上传多个文件  问题是swagger 不能无法上传多个文件(应该是我个人原因)  建议使用 postman的软件
     *
     * @param files      文件
     * @param bucket     桶名
     * @param objectName 路径
     * @return com.xksms.miniotest.Utils.text.JsonResult
     * @throws Exception 异常
     * @Author chengchao
     * @Date 15:59 2022/8/4
     **/
    JsonResult uploadFiles(MultipartFile[] files, String bucket, String objectName) throws Exception;

    /**
     * description:  minio下载文件 通过url下载文件
     *
     * @param url      文件url
     * @param response 响应
     * @return com.xksms.miniotest.utils.text.JsonResult
     * @author chengchao
     * @date 2022/8/5 11:03
     */
    JsonResult downloadFile(String url, HttpServletResponse response);

    /**
     * description:  删除一个文件
     *
     * @param url 文件url
     * @return com.xksms.miniotest.utils.text.JsonResult
     * @author chengchao
     * @date 2022/8/5 14:43
     */
    JsonResult deleteFile(String url);

    /**
     * description:  删除多个文件
     *
     * @param urls 文件url的数组
     * @return com.xksms.miniotest.utils.text.JsonResult
     * @throws Exception exception
     * @author ChengChao
     * @date 2022/8/5 17:21
     */
    JsonResult deleteFiles(String[] urls) throws Exception;

    /**
     * description:   多文件上传同时支持重命名
     * @param files 文件
     * @param bucket 桶名
     * @param objectName 路径
     * @param rename  重命名
     * @return java.util.List<java.lang.String>
     * @author ChengChao
     * @date  2022/8/9 17:22
     */
    JsonResult uploadFilesRename(MultipartFile[] files, String bucket, String objectName, String rename);

    JsonResult getBucketConfig(String bucket);

    JsonResult setBucketConfig(String bucket);

    JsonResult uploadMarkImage(MultipartFile file, String bucket, String objectName, String waterMarkContent) throws Exception;
}
